package cn.itcast.bos.web.action.take_delivery;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;

import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.ParentPackage;
import org.apache.struts2.convention.annotation.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import com.alibaba.fastjson.JSONArray;
import com.opensymphony.xwork2.ActionContext;

import cn.itcast.bos.service.take_delivery.PromotionService;
import cn.itcast.bos.web.action.common.BaseAction;

@SuppressWarnings("serial")
@ParentPackage("json-default")
@Controller
@Namespace("/")
@Scope("prototype")
public class ImageAction extends BaseAction<Object>{
	private File imgFile;//文件对象
	private String imgFileContentType;//文件类型
	private String imgFileFileName;//文件名

	public void setImgFile(File imgFile) {
		this.imgFile = imgFile;
	}


	public void setImgFileContentType(String imgFileContentType) {
		this.imgFileContentType = imgFileContentType;
	}

	public void setImgFileFileName(String imgFileFileName) {
		this.imgFileFileName = imgFileFileName;
	}


	@Action(value="image_upload",results={@Result(name="success",type="json")})
	public String upload() throws IOException{
		System.out.println("图片对象："+imgFile);
		System.out.println("图片名称："+imgFileFileName);
		System.out.println("图片类型"+imgFileContentType);
        
		//文件保存的绝对路径
		String savePath = ServletActionContext.getServletContext().getRealPath("/upload/");
		//响应给前台页面的相对路径
		String saveUrl = ServletActionContext.getRequest().getContextPath()+"/upload";
		
		//生成随机图片名
		UUID uuid = UUID.randomUUID(); //生成随机UUID
		//截取图片名称中的扩展名比如.jpg 注意文件的扩展名和文件类型是不一样的
		String imgType = imgFileFileName.substring(imgFileFileName.lastIndexOf("."));//截取拿到.jpg 拿到后缀名
	    String randomImgName = uuid + imgType;  //这里拿到整个图片的名字+后缀名
	    System.out.println("图片的扩展名是"+imgType+"---------"+uuid+"--------"+randomImgName);
	          
	   //保存图片
	    File destFile = new File(savePath+"/"+randomImgName);
	    System.out.println("图片保存在"+destFile.getAbsolutePath());
		FileUtils.copyFile(imgFile,destFile );
	  //将文件上传的结果通过json数据响应给前台，响应的的格式内容是kindEditor固定好的，
	  //一个是error，另一个是图片保存在服务器端的相对路径

		//将文件上传的结果通过json数据响应给前台，响应的的格式内容是kindEditor固定好的，
	   //一个是error，另一个是图片保存在服务器端的相对路径
    	 Map<String, Object> map = new HashMap<>();
         map.put("error", 0);
         map.put("url", saveUrl+"/"+randomImgName);  //返回相对路径
         System.out.println("前台的数据是"+map);
         ActionContext.getContext().getValueStack().push(map);
        
		return SUCCESS;
	}
	
	
	
	
	
	
	
	
	//用户点击图片空间，把所有已经上传的图片列表显示到前台出来。
	@Action(value="image_manage",results={@Result(name="success",type="json")})
	public String manage(){
		//根目录路径，可以指定绝对路径，比如带盘符
	   String rootPath = ServletActionContext.getServletContext().getRealPath("/")+"upload/";
	   
	   //根目录url  可以指定绝对路径 比如 bos_managerment\asdasd
	   String rootUrl = ServletActionContext.getRequest().getContextPath()+"/upload/";
	   
	   //图片的扩展名
	   String [] fileTypes = new String[]{"gif","jpg","jpeg","png","bmp"};
	   
	   //遍历目录取得文件信息
	   File currentPathFile = new File(rootPath);
	   List<Map<String,Object>> fileList = new ArrayList<>();
	   if(currentPathFile.listFiles() != null) {
			for (File file : currentPathFile.listFiles()) {
				Map<String, Object> hash = new HashMap<String, Object>();
				String fileName = file.getName();
				if(file.isDirectory()) {
					hash.put("is_dir", true);
					hash.put("has_file", (file.listFiles() != null));
					hash.put("filesize", 0L);
					hash.put("is_photo", false);
					hash.put("filetype", "");
				} else if(file.isFile()){
					String fileExt = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase();
					hash.put("is_dir", false);
					hash.put("has_file", false);
					hash.put("filesize", file.length());
					hash.put("is_photo", Arrays.<String>asList(fileTypes).contains(fileExt));
					hash.put("filetype", fileExt);
				}
				hash.put("filename", fileName);
				hash.put("datetime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(file.lastModified()));
				fileList.add(hash);
			}												
		}
	   
	   
	   Map<String, Object> result = new HashMap<String, Object>();
		result.put("moveup_dir_path", "");
		result.put("current_dir_path", rootPath);
		result.put("current_url", rootUrl);
		result.put("total_count", fileList.size());

		result.put("file_list", fileList);
 
        ActionContext.getContext().getValueStack().push(result);
		return SUCCESS;
		
	}			
}
